package com.define.ssh.listener;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

import com.define.ssh.model.OnlineSession;

/**
 * session监听器. 处理在线用户信息
 */
public class SessionListener implements HttpSessionAttributeListener {
	/**
	 * 定义监听的session属性名.
	 */
	public final static String LISTENER_NAME = "_login";

	/**
	 * 定义存储客户登录session的集合.
	 */
	private static List sessions = new ArrayList();

	/**
	 * 加入session时的监听方法.
	 * 
	 * @param HttpSessionBindingEvent
	 *            session事件
	 */
	@Override
	public void attributeAdded(HttpSessionBindingEvent sbe) {
		if (LISTENER_NAME.equals(sbe.getName())) {
			final List<OnlineSession> list = SessionListener.getSessions();
			boolean islogin = false;// 是否已存在 true:存在 false:不存在
			for (final OnlineSession ol : list) {
				if (ol.getUserInfo().getId() == ((OnlineSession) (sbe
						.getValue())).getUserInfo().getId()) {
					islogin = true;
				}
			}
			if (!islogin) {
				sessions.add(sbe.getValue());
			}
		}
	}

	/**
	 * session失效时的监听方法.
	 * 
	 * @param HttpSessionBindingEvent
	 *            session事件
	 */
	@Override
	public void attributeRemoved(HttpSessionBindingEvent sbe) {
		System.out.println("失效" + sbe.getName());
		if (LISTENER_NAME.equals(sbe.getName())) {
			sessions.remove(sbe.getValue());
		}
	}

	/**
	 * session覆盖时的监听方法.
	 * 
	 * @param HttpSessionBindingEvent
	 *            session事件
	 */
	@Override
	public void attributeReplaced(HttpSessionBindingEvent sbe) {
	}

	/**
	 * 返回客户登录session的集合.
	 * 
	 * @return
	 */
	public static List getSessions() {
		return sessions;
	}
}